package com.hl.annotation.bean_init_02;

import com.hl.annotation.bean_init_02.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Bean对象的创建过程
 *
 *      初始化后(执行AOP, 得到代理对象，如果不执行则没有代理对象) ->  【初始化后，执行AOP，得到代理对象】
 *
 * CGlib 原理
 *      父子类机制
 *      class UserServiceProxy extends UserService { }
 *
 * @author liuhuan
 */
public class Test {

    public static void main(String[] args) {
        // 启动一个 spring 容器，加载配置类AppConfig，扫描配置的路径
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        // 由于开启了 Aop 初始化，所以 此处的 userService 是CGlib代理对象的 Bean对象
        // 通过 debug, 查看对象类型是 普通对象 还是 代理对象
        UserService userService = applicationContext.getBean("userService", UserService.class);
        userService.test();

    }
}
